package utwente.sem.eindopdracht.tests;

import junit.framework.TestCase;
import utwente.sem.eindopdracht.*;

public class TestSysteem extends TestCase {
	private AssemblageLijn assemblageLijn;
	
	/**
	 * Startup
	 */
	public void setUp() {
		assemblageLijn = new AssemblageLijn(0);
	}
	
	/**
	 * Quit
	 */
	public void tearDown() {
		assemblageLijn = null;
	}

	/** 
	 * Test case 1
	 * Start het programma, 
	 * maak een product, 
	 * maak een productrun, 
	 * koppel een productrun aan een assemblagelijn, 
	 * start de assemblage
	 */
	public void testCaseOne() {
		// Maak een product
		Product product = new Product();
		product.setName("Product");
		
		Blauwdruk blauwdruk = new Blauwdruk();
		blauwdruk.setStap(0, "Stap");
		product.setBlauwdruk(blauwdruk);

		//Maak een productRun
		ProductRun productRun = new ProductRun();
		productRun.setProduct(product);
		productRun.setAantalProducten(2);
		productRun.setTijd(1200);
		
		//Koppel een productrun aan een assemblagelijn
		assemblageLijn.setProductRun(productRun);
		assertEquals(true, assemblageLijn.isStartbaar());
		
		//Start de assemblage
		assemblageLijn.start();
		
		//Check of assemblagelijn werkt.
		assertEquals(AssemblageLijn.STATUS_RUNNING, assemblageLijn.getStatus());
	}
	
	/**
	 * Test case 3
	 * Start het programma, 
	 * kies voor een assemblagelijn, 
	 * probeer te starten, 
	 * maak een productrun, 
	 * maak een product, 
	 * koppel productrun aan assemblagelijn, 
	 * start assemblage
	 */
	public void testCaseThree() {
		//De assemblagelijn is idle
		assertEquals(AssemblageLijn.STATUS_IDLE, assemblageLijn.getStatus());
		assertEquals(false, assemblageLijn.isStartbaar());
		assertEquals(false, assemblageLijn.isPauzeerbaar());
		
		// Maak een product
		Product product = new Product();
		product.setName("Product");
		
		Blauwdruk blauwdruk = new Blauwdruk();
		blauwdruk.setStap(0, "Stap");
		product.setBlauwdruk(blauwdruk);

		//Maak een productRun
		ProductRun productRun = new ProductRun();
		productRun.setProduct(product);
		productRun.setAantalProducten(2);
		productRun.setTijd(1200);
		
		//Koppel productrun aan assemblagelijn
		assemblageLijn.setProductRun(productRun);
		assertEquals(AssemblageLijn.STATUS_ASSIGNED, assemblageLijn.getStatus());
		assertEquals(true, assemblageLijn.isStartbaar());
		
		//Start de assemblageLijn.
		assemblageLijn.start();
		assertEquals(AssemblageLijn.STATUS_RUNNING, assemblageLijn.getStatus());

	}
}
